		.msfirst
		
#define EQU     .EQU
#define ORG     .ORG
#define RMB     .BLOCK
#define .byte     .BYTE
#define FCC     .TEXT
#define FDB     .WORD
#define END		.END

#define equ     .EQU
#define org     .ORG
#define rmb     .BLOCK
#define .byte     .BYTE
#define fcc     .TEXT
#define fdb     .WORD
#define	end		.END


TCSR	EQU		$0008		; Timer Control Status Register
TIMER	EQU		$0009		; Counter
OCR	EQU		$000B		; Output Compare Register
OCV	EQU		$4206		; Output Compare interrupt Vector

;MC-10 clock is .89488625Mhz or 894.88625Khz
; We need 2.5Khz interrupts so divide 894.88625 (.89488625 Mhz) by 2.58 = 346.855135... or 347 when rounded.
; subtract 22 to get the value we need or 325 aka $0145
TVAL	EQU		$200			0150		; Timer period - 22
TCSRVAL	EQU		$8			; bit settings for the TCSR
SVDP	EQU		$bfff		; sound and VDP control register address

		
		org		$5000
		sei

;******************************************
;* Main
;******************************************
Start:
		ldd		#$1300		;number of interrupts between calls (60Hz conversion)
		std		count60

;******************************************		
; set the Interrupt Control Vector
;******************************************
		LDAA	#$7e	;load 'jmp' instruction opcode
		STAA	OCV		;store into OCV vector
		LDX		#note		; store interrupt hander address after JMP instruction
		STX		OCV+1
;******************************************	
;Enable the timer interrupt
;******************************************
		; set the timer duration
		LDD		#TVAL
		STD		OCR
	
		;reset the counter to $FFF8.
		STAA	TIMER

		
		;Enable the timer interrupt
		LDAA	#TCSRVAL
		STAA	TCSR

		cli					;enable interrupts

		;endless loop

busy:		dec		count60+1
		bne		busy
		dec		count60
		bne		busy
		jsr		play2
		ldd		#$1400		;number of interrupts between calls (60Hz conversion)
		std		count60

		BRA		busy

;******************************************************
;nc/nc 	= no toggle
;nc/c 	= toggle output
;c/nc 	= toggle output
;c/c   	= no toggle
;******************************************************
note		LDAA	TCSR	; ack irq !
		stab	TIMER	; ack timer

		LDD	#TVAL   ; reset 
		STD	OCR	; timer


sum		ldd 	#$0000 
freq		addd 	#$0000
		std 	sum+1	
		bcs	tog	

sum2		ldd	#$0000	
		addd	freq2+1	
		std	sum2+1	
		bcc	notog	

output		ldaa	TSVDP		;get RAM copy of Sound and VDP setting
		eora  	#$80	
		staa	SVDP		;set the hardware


		rti

tog		ldd	sum2+1
freq2		addd	#$0000
		std	sum2+1
		bra	output

notog		ldaa	TSVDP		;get RAM copy of Sound and VDP setting	
		anda	#$7f
		staa	SVDP		;set the hardware


		rti


	
;************************************************
; OK SO FAR
;************************************************
	
play2
	ldx	#NOPAT

curnote	ldd	,x		;load 2 notes from pattern
	bpl	plnote		;pattern ends with $80 (-ve flag set)

curpat	ldx	#PATTERNS-2	;load pointer to patterns
	inx			
	inx			;bump pattern
	cpx	#PAT0-2		;end of patterns, time to loop
	blo	nxpat

	ldx	#PATTERNS	;first pattern (rem out for loop to another point)
nxpat	stx	curpat+1
	ldx	,x		;load pointer to notes
	ldd	,x		;(replace with bra curnote if there are ever blank patterns)

plnote	inx
	inx
	stx	play2+1
	asld			;*2 for for lookup
	staa	ok1+1
	stab	ok2+1

	ldx	#freqtab	;freq table pointer	
ok1	ldd	0,x		;get the right freq
stor1	std	freq+1		;store
ok2	ldd	0,x		;get the freq for chan2
stor2	std	freq2+1
;************************************************

out	 rts


;******************************************************
;equal tempered 12 note per octave frequency table
;******************************************************


count60		FDB	$1100			;Interrupt is at 258Khz.  It takes 43 interrupts to equal 60Hz
TSVDP		.byte 	$00			;Temporary Sound and VDP settings


freqtab	fdb	0,185,196,207,220,233,247,261,277,293,311,329
	fdb	349,370,392,415,440,466,493,523,554,587,622,659
	fdb	698,739,783,830,879,931,987,1045,1107,1173,1243,1317
	fdb	1395,1478,1566,1659,1758,1863,1973,2091,2215,2347,2486,2634
	fdb	2791,2957,3132,3319,3516,3725,3947,4181,4430,4693,4972,5268
	fdb	5581,5913,6265,6637,7032,7450,7893,8363,8860,9387,9945,10536
	fdb	11163,11826,12530,13275,14064,14900,15786,16725,17720,18773,19890,21072










PATLOOP
PATTERNS

	fdb PAT9
	fdb PAT9
	fdb PAT9
	fdb PAT9

	fdb PAT1
	fdb PAT1
	fdb PAT1
	fdb PAT1
	fdb PAT2
	fdb PAT2
	fdb PAT2
	fdb PAT2
	fdb PAT3
	fdb PAT3
	fdb PAT3
	fdb PAT3
	fdb PAT4
	fdb PAT4
	fdb PAT4
	fdb PAT4




	fdb PAT1
	fdb PAT1
	fdb PAT1
	fdb PAT1
	fdb PAT2
	fdb PAT2
	fdb PAT2
	fdb PAT2
	fdb PAT3
	fdb PAT3
	fdb PAT3
	fdb PAT3
	fdb PAT4
	fdb PAT4
	fdb PAT4
	fdb PAT4

	fdb PAT10
	fdb PAT10
	fdb PAT10
	fdb PAT10
	fdb PAT11
	fdb PAT11
	fdb PAT11
	fdb PAT11
	fdb PAT12
	fdb PAT12
	fdb PAT12
	fdb PAT12
	fdb PAT13
	fdb PAT13
	fdb PAT14
	fdb PAT14
	fdb PAT11
	fdb PAT11
	fdb PAT11
	fdb PAT11
	fdb PAT12
	fdb PAT12
	fdb PAT12
	fdb PAT12
	fdb PAT13
	fdb PAT13
	fdb PAT13
	fdb PAT13
	fdb PAT14
	fdb PAT14
	fdb PAT14
	fdb PAT14
	fdb PAT5
	fdb PAT5
	fdb PAT5
	fdb PAT5
	fdb PAT6
	fdb PAT6
	fdb PAT6
	fdb PAT6
	fdb PAT7
	fdb PAT7
	fdb PAT7
	fdb PAT7
	fdb PAT8
	fdb PAT8
	fdb PAT8
	fdb PAT8
	fdb PAT5
	fdb PAT5
	fdb PAT5
	fdb PAT5
	fdb PAT6
	fdb PAT6
	fdb PAT6
	fdb PAT6
	fdb PAT7
	fdb PAT7
	fdb PAT7
	fdb PAT7
	fdb PAT8
	fdb PAT8
	fdb PAT8
	fdb PAT8
	fdb PAT15
	fdb PAT15
	fdb PAT15
	fdb PAT19
	fdb PAT20
	fdb PAT20
	fdb PAT20
	fdb PAT21
	fdb PAT22
	fdb PAT22
	fdb PAT22
	fdb PAT22
	fdb PAT23
	fdb PAT23
	fdb PAT23
	fdb PAT28
	fdb PAT24
	fdb PAT24
	fdb PAT24
	fdb PAT24
	fdb PAT25
	fdb PAT25
	fdb PAT25
	fdb PAT25
	fdb PAT26
	fdb PAT26
	fdb PAT26
	fdb PAT26
	fdb PAT27
	fdb PAT27
	fdb PAT27
	fdb PAT27
	fdb PAT24
	fdb PAT24
	fdb PAT24
	fdb PAT24
	fdb PAT25
	fdb PAT25
	fdb PAT25
	fdb PAT25
	fdb PAT26
	fdb PAT26
	fdb PAT26
	fdb PAT26
	fdb PAT27
	fdb PAT27
	fdb PAT27
	fdb PAT27
	fdb PAT29
	fdb PAT29
	fdb PAT29
	fdb PAT29
	fdb PAT30
	fdb PAT30
	fdb PAT30
	fdb PAT30
	fdb PAT31
	fdb PAT31
	fdb PAT31
	fdb PAT31
	fdb PAT32
	fdb PAT32
	fdb PAT32
	fdb PAT32
	fdb PAT17
	fdb PAT17
	fdb PAT33
	fdb PAT33
	fdb PAT18
	fdb 0


PAT1
	.byte $f,$f
	.byte $0,$0
	.byte $1b,$0
	.byte $22,$0
	.byte $f,$f
	.byte $0,$0
	.byte $33,$1b
	.byte $3a,$1b
	.byte $f,$f
	.byte $0,$33
	.byte $1b,$3a
	.byte $1b,$0
	.byte $f,$f
	.byte $0,$0
	.byte $f,$0
	.byte $f,$0
NOPAT	.byte $80,$00

PAT2
	.byte $f,$f
	.byte $0,$0
	.byte $1b,$0
	.byte $22,$0
	.byte $f,$f
	.byte $0,$0
	.byte $31,$1b
	.byte $38,$1b
	.byte $f,$f
	.byte $0,$31
	.byte $1b,$38
	.byte $1b,$0
	.byte $f,$f
	.byte $0,$0
	.byte $f,$0
	.byte $f,$0
	.byte $80,$00

PAT3
	.byte $f,$f
	.byte $0,$0
	.byte $1b,$0
	.byte $22,$0
	.byte $f,$f
	.byte $0,$0
	.byte $2f,$1b
	.byte $36,$1b
	.byte $f,$f
	.byte $0,$2f
	.byte $1b,$36
	.byte $1b,$0
	.byte $f,$f
	.byte $0,$0
	.byte $f,$0
	.byte $f,$0
	.byte $80,$00

PAT4
	.byte $f,$f
	.byte $0,$0
	.byte $1b,$0
	.byte $22,$0
	.byte $f,$f
	.byte $0,$0
	.byte $2e,$1b
	.byte $35,$1b
	.byte $f,$f
	.byte $0,$2e
	.byte $1b,$35
	.byte $1b,$0
	.byte $f,$f
	.byte $0,$0
	.byte $f,$0
	.byte $f,$0
	.byte $80,$00

PAT5
	.byte $f,$f
	.byte $f,$0
	.byte $1b,$0
	.byte $22,$0
	.byte $f,$f
	.byte $f,$0
	.byte $33,$1b
	.byte $3a,$1b
	.byte $f,$f
	.byte $f,$33
	.byte $1b,$3a
	.byte $1b,$0
	.byte $f,$f
	.byte $f,$0
	.byte $1b,$f
	.byte $1b,$0
	.byte $80,$00

PAT6
	.byte $f,$f
	.byte $f,$0
	.byte $1b,$0
	.byte $22,$0
	.byte $f,$f
	.byte $f,$0
	.byte $31,$1b
	.byte $38,$1b
	.byte $f,$f
	.byte $f,$31
	.byte $1b,$38
	.byte $1b,$0
	.byte $f,$f
	.byte $f,$0
	.byte $1b,$f
	.byte $1b,$0
	.byte $80,$00

PAT7
	.byte $f,$f
	.byte $f,$0
	.byte $1b,$0
	.byte $22,$0
	.byte $f,$f
	.byte $f,$0
	.byte $2f,$1b
	.byte $36,$1b
	.byte $f,$f
	.byte $f,$2f
	.byte $1b,$36
	.byte $1b,$0
	.byte $f,$f
	.byte $f,$0
	.byte $1b,$f
	.byte $1b,$0
	.byte $80,$00

PAT8
	.byte $f,$f
	.byte $f,$0
	.byte $1b,$0
	.byte $22,$0
	.byte $f,$f
	.byte $f,$0
	.byte $2e,$1b
	.byte $35,$1b
	.byte $f,$f
	.byte $f,$2e
	.byte $1b,$35
	.byte $1b,$0
	.byte $f,$f
	.byte $f,$0
	.byte $1b,$f
	.byte $1b,$0
	.byte $80,$00

PAT9
	.byte $f,$f
	.byte $0,$0
	.byte $0,$0
	.byte $0,$0
	.byte $0,$f
	.byte $0,$0
	.byte $0,$0
	.byte $0,$0
	.byte $f,$f
	.byte $0,$0
	.byte $0,$0
	.byte $0,$0
	.byte $0,$f
	.byte $0,$0
	.byte $0,$0
	.byte $0,$0
	.byte $80,$00

PAT10
	.byte $f,$f
	.byte $f,$1b
	.byte $1b,$27
	.byte $1b,$1b
	.byte $f,$f
	.byte $f,$1b
	.byte $1b,$27
	.byte $1b,$1b
	.byte $f,$f
	.byte $f,$1b
	.byte $1b,$27
	.byte $1b,$1b
	.byte $f,$f
	.byte $f,$1b
	.byte $1b,$27
	.byte $1b,$1b
	.byte $80,$00

PAT11
	.byte $f,$f
	.byte $f,$1b
	.byte $1b,$2a
	.byte $1b,$1b
	.byte $f,$f
	.byte $f,$1b
	.byte $1b,$2a
	.byte $1b,$1b
	.byte $f,$f
	.byte $f,$1b
	.byte $1b,$2a
	.byte $1b,$1b
	.byte $f,$f
	.byte $f,$1b
	.byte $1b,$2a
	.byte $1b,$1b
	.byte $80,$00

PAT12
	.byte $f,$f
	.byte $f,$1b
	.byte $1b,$29
	.byte $1b,$1b
	.byte $f,$f
	.byte $f,$1b
	.byte $1b,$29
	.byte $1b,$1b
	.byte $f,$f
	.byte $f,$1b
	.byte $1b,$29
	.byte $1b,$1b
	.byte $f,$f
	.byte $f,$1b
	.byte $1b,$29
	.byte $1b,$1b
	.byte $80,$00

PAT13
	.byte $f,$f
	.byte $f,$1b
	.byte $1b,$22
	.byte $1b,$1b
	.byte $f,$f
	.byte $f,$1b
	.byte $1b,$22
	.byte $1b,$1b
	.byte $f,$f
	.byte $f,$1b
	.byte $1b,$22
	.byte $1b,$1b
	.byte $f,$f
	.byte $f,$1b
	.byte $1b,$22
	.byte $1b,$1b
	.byte $80,$00

PAT14
	.byte $f,$f
	.byte $f,$1b
	.byte $1b,$25
	.byte $1b,$1b
	.byte $f,$f
	.byte $f,$1b
	.byte $1b,$25
	.byte $1b,$1b
	.byte $f,$f
	.byte $f,$1b
	.byte $1b,$25
	.byte $1b,$1b
	.byte $f,$f
	.byte $f,$1b
	.byte $1b,$25
	.byte $1b,$1b
	.byte $80,$00

PAT15
	.byte $27,$27
	.byte $2e,$2e
	.byte $0,$0
	.byte $27,$0
	.byte $2e,$0
	.byte $0,$0
	.byte $0,$27
	.byte $0,$2e
	.byte $f,$0
	.byte $f,$27
	.byte $f,$2e
	.byte $f,$0
	.byte $f,$27
	.byte $f,$2e
	.byte $f,$0
	.byte $f,$0
	.byte $80,$00

PAT17
	.byte $f,$1b
	.byte $f,$1b
	.byte $f,$1b
	.byte $f,$1b
	.byte $f,$1b
	.byte $f,$1b
	.byte $f,$1b
	.byte $f,$1b
	.byte $f,$1b
	.byte $f,$1b
	.byte $f,$1b
	.byte $f,$1b
	.byte $f,$1b
	.byte $f,$1b
	.byte $f,$1b
	.byte $f,$1b
	.byte $80,$00

PAT18
	.byte $0,$f
	.byte $0,$f
	.byte $0,$f
	.byte $0,$f
	.byte $0,$f
	.byte $0,$f
	.byte $0,$f
	.byte $0,$f
	.byte $0,$0
	.byte $0,$0
	.byte $0,$0
	.byte $0,$0
	.byte $0,$0
	.byte $0,$0
	.byte $0,$0
	.byte $0,$0
	.byte $80,$00

PAT19
	.byte $27,$27
	.byte $2e,$2e
	.byte $0,$0
	.byte $27,$0
	.byte $2e,$0
	.byte $0,$0
	.byte $0,$27
	.byte $0,$2e
	.byte $1b,$0
	.byte $1b,$27
	.byte $1b,$2e
	.byte $16,$0
	.byte $16,$27
	.byte $16,$2e
	.byte $12,$0
	.byte $12,$0
	.byte $80,$00

PAT20
	.byte $27,$27
	.byte $2e,$2e
	.byte $0,$0
	.byte $27,$0
	.byte $2e,$0
	.byte $0,$0
	.byte $0,$27
	.byte $0,$2e
	.byte $d,$0
	.byte $d,$27
	.byte $d,$2e
	.byte $d,$0
	.byte $d,$27
	.byte $d,$2e
	.byte $d,$0
	.byte $d,$0
	.byte $80,$00

PAT21
	.byte $27,$27
	.byte $2e,$2e
	.byte $0,$0
	.byte $27,$0
	.byte $2e,$0
	.byte $0,$0
	.byte $0,$27
	.byte $0,$2e
	.byte $d,$0
	.byte $d,$27
	.byte $d,$2e
	.byte $11,$0
	.byte $11,$27
	.byte $11,$2e
	.byte $14,$0
	.byte $14,$0
	.byte $80,$00

PAT22
	.byte $27,$27
	.byte $2e,$2e
	.byte $0,$0
	.byte $27,$0
	.byte $2e,$0
	.byte $0,$0
	.byte $0,$27
	.byte $0,$2e
	.byte $14,$0
	.byte $14,$27
	.byte $14,$2e
	.byte $14,$0
	.byte $14,$27
	.byte $14,$2e
	.byte $14,$0
	.byte $14,$0
	.byte $80,$00

PAT23
	.byte $27,$27
	.byte $2e,$2e
	.byte $0,$0
	.byte $27,$0
	.byte $2e,$0
	.byte $0,$0
	.byte $0,$27
	.byte $0,$2e
	.byte $16,$0
	.byte $16,$27
	.byte $16,$2e
	.byte $16,$0
	.byte $16,$27
	.byte $16,$2e
	.byte $16,$0
	.byte $16,$0
	.byte $80,$00

PAT24
	.byte $1b,$22
	.byte $1b,$2e
	.byte $f,$2c
	.byte $f,$27
	.byte $1e,$1b
	.byte $1e,$2e
	.byte $f,$2c
	.byte $f,$27
	.byte $20,$1e
	.byte $20,$2e
	.byte $f,$2c
	.byte $f,$27
	.byte $22,$20
	.byte $22,$2e
	.byte $f,$2c
	.byte $f,$27
	.byte $80,$00

PAT25
	.byte $1b,$22
	.byte $1b,$2e
	.byte $d,$2c
	.byte $d,$27
	.byte $1e,$1b
	.byte $1e,$2e
	.byte $d,$2c
	.byte $d,$27
	.byte $20,$1e
	.byte $20,$2e
	.byte $d,$2c
	.byte $d,$27
	.byte $22,$20
	.byte $22,$2e
	.byte $d,$2c
	.byte $d,$27
	.byte $80,$00

PAT26
	.byte $1b,$22
	.byte $1b,$33
	.byte $b,$2e
	.byte $b,$2a
	.byte $1e,$1b
	.byte $1e,$33
	.byte $b,$2e
	.byte $b,$2a
	.byte $20,$1e
	.byte $20,$33
	.byte $b,$2e
	.byte $b,$2a
	.byte $22,$20
	.byte $22,$33
	.byte $b,$2e
	.byte $b,$2a
	.byte $80,$00

PAT27
	.byte $1b,$22
	.byte $1b,$31
	.byte $a,$2e
	.byte $a,$29
	.byte $1e,$1b
	.byte $1e,$31
	.byte $a,$2e
	.byte $a,$29
	.byte $20,$1e
	.byte $20,$31
	.byte $a,$2e
	.byte $a,$29
	.byte $22,$20
	.byte $22,$31
	.byte $a,$2e
	.byte $a,$29
	.byte $80,$00

PAT28
	.byte $27,$27
	.byte $2e,$2e
	.byte $0,$0
	.byte $27,$0
	.byte $2e,$0
	.byte $0,$0
	.byte $0,$27
	.byte $0,$2e
	.byte $16,$22
	.byte $16,$22
	.byte $15,$21
	.byte $14,$20
	.byte $13,$1f
	.byte $12,$1e
	.byte $11,$1d
	.byte $10,$1c
	.byte $80,$00

PAT29
	.byte $1b,$22
	.byte $1b,$2e
	.byte $0,$2c
	.byte $0,$27
	.byte $1e,$1b
	.byte $1e,$2e
	.byte $0,$2c
	.byte $0,$27
	.byte $20,$1e
	.byte $20,$2e
	.byte $0,$2c
	.byte $0,$27
	.byte $22,$20
	.byte $22,$2e
	.byte $0,$2c
	.byte $0,$27
	.byte $80,$00

PAT30
	.byte $19,$22
	.byte $19,$2e
	.byte $0,$2c
	.byte $0,$27
	.byte $1e,$1b
	.byte $1e,$2e
	.byte $0,$2c
	.byte $0,$27
	.byte $20,$1e
	.byte $20,$2e
	.byte $0,$2c
	.byte $0,$27
	.byte $22,$20
	.byte $22,$2e
	.byte $0,$2c
	.byte $0,$27
	.byte $80,$00

PAT31
	.byte $17,$22
	.byte $17,$33
	.byte $0,$2e
	.byte $0,$2a
	.byte $1e,$1b
	.byte $1e,$33
	.byte $0,$2e
	.byte $0,$2a
	.byte $20,$1e
	.byte $20,$33
	.byte $0,$2e
	.byte $0,$2a
	.byte $22,$20
	.byte $22,$33
	.byte $0,$2e
	.byte $0,$2a
	.byte $80,$00

PAT32
	.byte $16,$22
	.byte $16,$31
	.byte $0,$2e
	.byte $0,$29
	.byte $1e,$1b
	.byte $1e,$31
	.byte $0,$2e
	.byte $0,$29
	.byte $20,$1e
	.byte $20,$31
	.byte $0,$2e
	.byte $0,$29
	.byte $22,$20
	.byte $22,$31
	.byte $0,$2e
	.byte $0,$29
	.byte $80,$00

PAT33
	.byte $f,$f
	.byte $f,$f
	.byte $f,$f
	.byte $f,$f
	.byte $f,$f
	.byte $f,$f
	.byte $f,$f
	.byte $f,$f
	.byte $f,$f
	.byte $f,$f
	.byte $f,$f
	.byte $f,$f
	.byte $f,$f
	.byte $f,$f
	.byte $f,$f
	.byte $f,$f
	.byte $80,$00
PAT34

	.byte $f,$f
	.byte $0,$0
	.byte $0,$0
	.byte $0,$0
	.byte $0,$0
	.byte $0,$0
	.byte $0,$0
	.byte $80,$00

	.end	
	
